'\"macro stdmacro
.\"
.\" Copyright (c) 2013,2020 Red Hat.
.\" Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
.\"
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of the GNU General Public License as published by the
.\" Free Software Foundation; either version 2 of the License, or (at your
.\" option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.\" or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
.\" for more details.
.\"
.\"
.TH PMGETCONTEXTHOSTNAME 3 "PCP" "Performance Co-Pilot"
.SH NAME
\f3pmGetHostName\f1,
\f3pmGetContextHostName\f1,
\f3pmGetContextHostName_r\f1 \- return the hostname associated with a Performance Co-Pilot context
.SH "C SYNOPSIS"
.ft 3
.ad l
.hy 0
#include <pcp/pmapi.h>
.sp
int pmGetHostName(int \fIid\fP, char *\fIbuf\fP, int \fIbuflen\fP);
.br
const char *pmGetContextHostName(int \fIid\fP);
.br
char *pmGetContextHostName_r(int \fIid\fP, char *\fIbuf\fP, int \fIbuflen\fP);
.sp
cc ... \-lpcp
.hy
.ad
.ft 1
.SH DESCRIPTION
Given a valid PCP context identifier previously created with
.BR pmNewContext (3)
or
.BR pmDupContext (3),
the
.B pmGetContextHostName
function returns the hostname associated with
.IR id .
The
.B pmGetContextHostName_r
function does the same, but stores the result in a user-supplied buffer
.I buf
of length
.IR buflen ,
which should have room for at least
.B MAXHOSTNAMELEN
bytes.
The
.B pmGetHostName
function behaves similarly again, but returns a status code to indicate
success or failure.
.PP
If the context
.I id
is associated with an archive source of data, the
hostname returned is extracted from the archive label using
.BR pmGetArchiveLabel (3).
.PP
For live contexts, an attempt will first be made to retrieve
the hostname from the PCP collector system using
.BR pmFetch (3)
with the
.I pmcd.hostname
metric.
This allows client tools using this interface to retrieve an
accurate host identifier even in the presence of port forwarding
and tunnelled connections.
.PP
Should this not succeed, then a fallback method is used.
For local contexts \- with local meaning any of DSO, ``localhost''
or Unix domain socket connection \- a hostname will be sought via
.BR gethostname (3).
For other contexts, the hostname extracted from the initial
context host specification will be used.
.SH "RETURN VALUE"
If
.I id
is not a valid PCP context identifier,
the returned hostname is a zero length string.
.PP
On failure, the return code of
.B pmGetHostName
is a negative PMAPI error code which can be processed by
.BR pmErrStr_r (3)
for diagnostics relating to the failure to obtain the context hostname.
.SH NOTES
.B pmGetContextHostName
returns a pointer to a static buffer,
so the returned value is only valid until the next call to
.B pmGetContextHostName
and hence is not thread-safe.
Multi-threaded applications should use
.B pmGetHostName
or
.B pmGetContextHostName_r
instead.
.SH "PCP ENVIRONMENT"
Environment variables with the prefix
.B PCP_
are used to parameterize the file and directory names
used by PCP.
On each installation, the file
.I /etc/pcp.conf
contains the local values for these variables.
The
.B $PCP_CONF
variable may be used to specify an alternative
configuration file,
as described in
.BR pcp.conf (5).
Values for these variables may be obtained programmatically
using the
.BR pmGetConfig (3)
function.
.SH SEE ALSO
.BR PCPIntro (1),
.BR PMAPI (3),
.BR gethostname (3),
.BR pmDupContext (3),
.BR pmErrStr_r (3),
.BR pmFetch (3),
.BR pmGetArchiveLabel (3),
.BR pmNewContext (3),
.BR pcp.conf (5)
and
.BR pcp.env (5).
